<?php
/**
 * Created by PhpStorm.
 * User: zing
 * Date: 2018/5/7
 * Time: 10:02
 */

/**
 * 获取和设置配置参数 支持批量定义
 * @param string|array $name 配置变量
 * @param mixed $value 配置值
 * @param mixed $default 默认值
 * @return mixed
 */
function C($name = null, $value = null, $default = null)
{
    static $_config = array();
    // 无参数时获取所有
    if (empty($name)) {
        return $_config;
    }
    // 优先执行设置获取或赋值
    if (is_string($name)) {
        if (!strpos($name, '.')) {
            $name = strtoupper($name);
            if (is_null($value))
                return isset($_config[$name]) ? $_config[$name] : $default;
            $_config[$name] = $value;
            return null;
        }
        // 二维数组设置和获取支持
        $name = explode('.', $name);
        $name[0] = strtoupper($name[0]);
        if (is_null($value))
            return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : $default;
        $_config[$name[0]][$name[1]] = $value;
        return null;
    }
    // 批量设置
    if (is_array($name)) {
        $_config = array_merge($_config, array_change_key_case($name, CASE_UPPER));
        return null;
    }
    return null; // 避免非法参数
}

C('name', 'zing');
C('user.name', 'zing');

echo C('name') . PHP_EOL;
C('user.name', 'zing');
C('user.pwd', 'zing');

//取值
echo C('user.age', null, 10) . PHP_EOL;
echo C('user.name') . PHP_EOL;
print_r(C('user'));
print_r(C());

C(['student' => C('user')]);
print_r(C());

$str = '';
echo is_null($str) . PHP_EOL;//0
echo is_string($str) . PHP_EOL;//1
echo empty($str) . PHP_EOL;//1
echo isset($str) . PHP_EOL;//1

$arr = [];
echo is_null($arr) . PHP_EOL;//0
echo is_string($arr) . PHP_EOL;//0
echo is_array($arr) . PHP_EOL;//1
echo empty($arr) . PHP_EOL;//1
echo isset($arr) . PHP_EOL;//1
unset($arr);
echo "----------------------------" . PHP_EOL;
echo is_null($arr) . PHP_EOL;//1 //PHP Notice:  Undefined variable
echo is_string($arr) . PHP_EOL;//0 //PHP Notice:  Undefined variable
echo is_array($arr) . PHP_EOL;//1 //PHP Notice:  Undefined variable
echo empty($arr) . PHP_EOL;//1
echo isset($arr) . PHP_EOL;//0
echo "----------------------------" . PHP_EOL;
echo is_null(null).PHP_EOL;//1
echo empty(null).PHP_EOL;//1
//echo isset(null).PHP_EOL;
//PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
